In an event-based multithreading processor, instructions are processed from one program until it is requested, or decides itself, to change to executing another program. When such an event occurs, the processor stops executing the instructions from program A and starts processing of program instructions from program B. In some forms, a simplified method to switch programs can include halt fetching program A instructions, flush an associated data pipeline of the processor, and terminate or kill all instructions of program A which that have not yet been committed. The processor can then start fetching instructions for program B. However, this method of switching programs can lead to execution penalty of a fairly large number of cycles as the processor flushes and starts re-fetching. Additionally, instructions which were completed but not committed (e.g. finalized) would have to be re-fetched and re-processed when program A was resumed, resulting in duplicate execution. This can lead to increased execution times and power dissipation of multithreaded processors.